// JWT工具类
const jwt = require('jsonwebtoken');
require('dotenv').config();

// 从环境变量获取JWT配置
const JWT_SECRET = process.env.JWT_SECRET;
const JWT_EXPIRES_IN = process.env.JWT_EXPIRES_IN || '24h';

/**
 * JWT工具类
 * 提供JWT令牌的生成和验证功能
 */
class JwtUtils {
  /**
   * 生成JWT令牌
   * @param {Object} payload - 要包含在令牌中的数据
   * @param {string} expiresIn - 过期时间，默认使用环境变量配置
   * @returns {string} - JWT令牌
   */
  static generateToken(payload, expiresIn = JWT_EXPIRES_IN) {
    return jwt.sign(payload, JWT_SECRET, { expiresIn });
  }

  /**
   * 验证JWT令牌
   * @param {string} token - JWT令牌
   * @returns {Object|null} - 令牌中的数据，如果验证失败返回null
   */
  static verifyToken(token) {
    try {
      return jwt.verify(token, JWT_SECRET);
    } catch (error) {
      console.error('JWT验证失败:', error);
      return null;
    }
  }

  /**
   * 解析JWT令牌（不验证）
   * @param {string} token - JWT令牌
   * @returns {Object|null} - 令牌中的数据
   */
  static decodeToken(token) {
    try {
      return jwt.decode(token);
    } catch (error) {
      console.error('JWT解析失败:', error);
      return null;
    }
  }
}

module.exports = JwtUtils;